.\" Copyright (c) 2020-2022 by Alejandro Colomar <alx@kernel.org>
.\" and Copyright (c) 2020 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"
.TH stat 3type 2024-05-02 "Linux man-pages 6.9.1"
.SH NAME
stat \- file status
.SH LIBRARY
Standard C library
.RI ( libc )
.SH SYNOPSIS
.EX
.B #include <sys/stat.h>
.P
.B struct stat {
.BR "    dev_t      st_dev;" "      /* ID of device containing file */"
.BR "    ino_t      st_ino;" "      /* Inode number */"
.BR "    mode_t     st_mode;" "     /* File type and mode */"
.BR "    nlink_t    st_nlink;" "    /* Number of hard links */"
.BR "    uid_t      st_uid;" "      /* User ID of owner */"
.BR "    gid_t      st_gid;" "      /* Group ID of owner */"
.BR "    dev_t      st_rdev;" "     /* Device ID (if special file) */"
.BR "    off_t      st_size;" "     /* Total size, in bytes */"
.BR "    blksize_t  st_blksize;" "  /* Block size for filesystem I/O */"
.BR "    blkcnt_t   st_blocks;" "   /* Number of 512 B blocks allocated */"
\&
    /* Since POSIX.1-2008, this structure supports nanosecond
       precision for the following timestamp fields.
       For the details before POSIX.1-2008, see VERSIONS. */
\&
.BR "    struct timespec  st_atim;" "  /* Time of last access */"
.BR "    struct timespec  st_mtim;" "  /* Time of last modification */"
.BR "    struct timespec  st_ctim;" "  /* Time of last status change */"
\&
.BR "#define st_atime  st_atim.tv_sec" "  /* Backward compatibility */"
.B "#define st_mtime  st_mtim.tv_sec"
.B "#define st_ctime  st_ctim.tv_sec"
.B };
.EE
.P
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.P
.IR st_atim ,
.IR st_mtim ,
.IR st_ctim :
.nf
    Since glibc 2.12:
        _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
    glibc 2.19 and earlier:
        _BSD_SOURCE || _SVID_SOURCE
.fi
.SH DESCRIPTION
Describes information about a file.
.P
The fields are as follows:
.TP
.I st_dev
This field describes the device on which this file resides.
(The
.BR major (3)
and
.BR minor (3)
macros may be useful to decompose the device ID in this field.)
.TP
.I st_ino
This field contains the file's inode number.
.TP
.I st_mode
This field contains the file type and mode.
See
.BR inode (7)
for further information.
.TP
.I st_nlink
This field contains the number of hard links to the file.
.TP
.I st_uid
This field contains the user ID of the owner of the file.
.TP
.I st_gid
This field contains the ID of the group owner of the file.
.TP
.I st_rdev
This field describes the device that this file (inode) represents.
.TP
.I st_size
This field gives the size of the file (if it is a regular
file or a symbolic link) in bytes.
The size of a symbolic link is the length of the pathname
it contains, without a terminating null byte.
.TP
.I st_blksize
This field gives the "preferred" block size for efficient filesystem I/O.
.TP
.I st_blocks
This field indicates the number of blocks allocated to the file,
in 512-byte units.
(This may be smaller than
.IR st_size /512
when the file has holes.)
.TP
.I st_atime
This is the time of the last access of file data.
.TP
.I st_mtime
This is the time of last modification of file data.
.TP
.I st_ctime
This is the file's last status change timestamp
(time of last change to the inode).
.P
For further information on the above fields, see
.BR inode (7).
.SH STANDARDS
POSIX.1-2008.
.SH HISTORY
POSIX.1-2001.
.P
Old kernels and old standards did not support nanosecond timestamp fields.
Instead, there were three timestamp
.RI fields\[em] st_atime ,
.IR st_mtime ,
and
.IR st_ctime \[em]typed
as
.I time_t
that recorded timestamps with one-second precision.
.P
Since Linux 2.5.48, the
.I stat
structure supports nanosecond resolution for the three file timestamp fields.
The nanosecond components of each timestamp are available
via names of the form
.IR st_atim.tv_nsec ,
if suitable test macros are defined.
Nanosecond timestamps were standardized in POSIX.1-2008,
and, starting with glibc 2.12,
glibc exposes the nanosecond component names if
.B _POSIX_C_SOURCE
is defined with the value 200809L or greater, or
.B _XOPEN_SOURCE
is defined with the value 700 or greater.
Up to and including glibc 2.19,
the definitions of the nanoseconds components are also defined if
.B _BSD_SOURCE
or
.B _SVID_SOURCE
is defined.
If none of the aforementioned macros are defined,
then the nanosecond values are exposed with names of the form
.IR st_atimensec .
.SH NOTES
The following header also provides this type:
.IR <ftw.h> .
.SH SEE ALSO
.BR stat (2),
.BR inode (7)
